/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.server.main;

import com.core.utils.DateUtil;
import com.server.database.ChildInfo;
import com.server.database.DataEngine;
import com.server.database.MateInfo;
import com.server.database.UserInfo;
import java.sql.Timestamp;
import java.util.List;

/**
 *
 * @author daz
 */
public class TelcoLogin {

    public static final int USER_NULL = 0;
    public static final int USER_GRANTED = 1;
    public static final int USER_WRONG_PASS = 2;
    public static final int USER_NEED_ACTIVATE = 3;
    private String userName;
    private String userPassword;
    private ClientManager parent;
    private DataEngine dataEngine = DataEngine.getInstance();
    private UserInfo userInfo;
    public boolean isReturn;

    public TelcoLogin(String userName, String password, ClientManager parent) {
        this.userName = userName;
        this.userPassword = password;
        this.parent = parent;
    }

    public int response() {
        userInfo = parent.getUserInfo(userName);
        if (userInfo == null) {
            // no account found
            parent.sendMessage(MessageType.LOGIN + "|" + USER_NULL);
            return USER_NULL;
        }

        if (!userInfo.getUserPassword().equals(userPassword)) {
            //wrong pass
            parent.sendMessage(MessageType.LOGIN
                    + "|" + USER_WRONG_PASS);
            return USER_WRONG_PASS;
        }

        //login suceess
        if (userInfo.getActivated() == 0) {
            parent.setCompanyId(userInfo.getCompanyId());
            parent.sendMessage("ACTIVATE|" + userInfo.getSyntaxActivate() + "|" + userInfo.getNumberActivate());
            return USER_NEED_ACTIVATE;
        }

        if (userInfo.getNumberLogin() >= 2) {
            parent.sendMessage("UNLOCK|");
        }
        //not online
        if (userInfo.getUserIsplay() == 0) {
            parent.setUserName(userName);
            parent.enterServer(userInfo.getNumberLogin() + 1);
            parent.sendSmsInfo(userInfo.getCompanyId());
            loadItemInfo();
            checkMoneyBonus();
            sendLoginInfo();
//            sendSmsInfo();
            return USER_GRANTED;
        }
        //user online
        ClientManager userOnline = parent.getClient(userInfo.getUserId());
        if (userOnline != null) {
            //truong hop ko co online nhung db save loi
            if (parent.getClientSocket() == userOnline.getClientSocket()) {
                parent.setUserName(userName);
//                parent.removeClient(userOnline);
                isReturn = true;
            } else {
                parent.setUserName(userName);
//                parent.log(userName + " dang nhap kick " + userOnline.getUserName());
                if (userOnline.getUserName().equals(userName)) {
                    userOnline.kickOut();
                }
            }
        }
        parent.enterServer(userInfo.getNumberLogin() + 1);
        loadItemInfo();
        checkMoneyBonus();
        sendLoginInfo();
        parent.sendSmsInfo(userInfo.getCompanyId());
        return USER_GRANTED;
    }

    private void sendLoginInfo() {
        parent.changeLoginId();
        String msg = MessageType.LOGIN + "|" + USER_GRANTED + "|" + userInfo.getGender()
                + "|" + userInfo.getMoney() + "|" + userInfo.getJ2meVersionCode()
                + "|" + userInfo.getJ2meVersionName() + "|" + userInfo.getJ2meLink()
                + "|" + userInfo.getAndroidVersionCode() + "|" + userInfo.getAndroidVersionName()
                + "|" + userInfo.getAndroidLink() + "|" + userInfo.getAdString();
        parent.sendMessage(msg);

    }

//    private void loadSmsInfo() {
//        parent.setSmsInfo(dataEngine.getSmsInfo());
//    }
    private void loadItemInfo() {
        parent.setItemInfo(dataEngine.getItemInfo());
    }

    private void checkMoneyBonus() {
        MateInfo mateInfo = parent.getMateInfo();
        Timestamp currentTime = DateUtil.newTimestamp();
        if (mateInfo != null) {
            List<ChildInfo> childInfo = parent.getChildInfo();
            if (childInfo != null) {
                for (int i = 0; i < childInfo.size(); i++) {
                    if ((DateUtil.daysDiff(childInfo.get(i).getBirthDay(), currentTime) <= 30)
                            && (DateUtil.getDate(userInfo.getLastLogin()) != DateUtil.getDate(currentTime))) {
                        parent.updateMoneyDelta(5000);
                        parent.sendMessageToUser("Thông báo", parent.getUserName(), currentTime, 0, "Bạn đã được cộng thêm 5000 xu vào tài khoản, đây là tiền trợ cấp nuôi con, khoản tiền này được tự động cập nhật hằng ngày (nếu bạn có đăng nhập trong ngày hôm đó) và liên tục trong một tháng kể từ thời điểm sinh con.");
                    }
                }
            }
        }
    }

    public String getUserName() {
        return this.userName;
    }
}
